<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组解构</title>
</head>

<body>
    <p>解构赋值是一种快速为变量赋值的简洁语法，本质上仍然是为变量赋值，分为数组解构、对象解构两大类型。</p>
    <p>
        数组解构:<br>
        数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法，如下代码所示：
    </p>
    <p>
        总结：<br>

        1. 赋值运算符 = 左侧的 [] 用于批量声明变量，右侧数组的单元值将被赋值给左侧的变量 <br>
        2. 变量的顺序对应数组单元值的位置依次进行赋值操作 <br>
        3. 变量的数量大于单元值数量时，多余的变量将被赋值为 undefined <br>
        4. 变量的数量小于单元值数量时，可以通过 ... 获取剩余单元值，但只能置于最末位 <br>
        5. 允许初始化变量的默认值，且只有单元值为 undefined 时默认值才会生效 <br>

        注：支持多维解构赋值，比较复杂后续有应用需求时再进一步分析

    </p>

    <p>对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法</p>
    <p>
        总结：<br>

        1. 赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量<br>
        2. 对象属性的值将被赋值给与属性名相同的变量<br>
        3. 对象中找不到与变量名一致的属性时变量值为 undefined<br>
        4. 允许初始化变量的默认值，属性不存在或单元值为 undefined 时默认值才会生效<br>

        注：支持多维解构赋值

    </p>
    <script>
        let arr = [1, 2, 3]
        let [a, b, c] = arr
        console.log(a); // 1
        console.log(b); // 2
        console.log(c); // 3
        let [x, ...y] = arr
        console.log(x); // 1
        console.log(y); // [2, 3]

        // 普通对象
        const user = {
            name: '小明',
            age: 18,
            gender: '男',
        };
        // 批量声明变量 name age
        // 同时将数组单元值 小明  18 依次赋值给变量 name  age
        const { name, age, gender, isSleep } = user
        console.log(name) // 小明
        console.log(age) // 18
        console.log(gender) // 男
        console.log(isSleep); // undefined 对象中找不到与变量名一致的属性时变量值为 undefined


        const { name: name1, ...message } = user
        console.log(name1); // 小明
        console.log(message); // {age: 18, gender: '男'}


        // 多维解构赋值
        // 1. 这是后台传递过来的数据
        const msg = {
            "code": 200,
            "msg": "获取新闻列表成功",
            "data": [
                {
                    "id": 1,
                    "title": "5G商用自己，三大运用商收入下降",
                    "count": 58
                },
                {
                    "id": 2,
                    "title": "国际媒体头条速览",
                    "count": 56
                },
                {
                    "id": 3,
                    "title": "乌克兰和俄罗斯持续冲突",
                    "count": 1669
                },

            ]
        }

        // 需求1： 请将以上msg对象  采用对象解构的方式 只选出  data 方面后面使用渲染页面
        const { data } = msg
        console.log(data)
        // 需求2： 上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给 函数
        // const { data } = msg
        // msg 虽然很多属性，但是我们利用解构只要 data值
        function render({ data }) {
            // const { data } = arr
            // 我们只要 data 数据
            // 内部处理
            console.log(data)

        }
        render(msg)

        // 需求3， 为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData
        function render({ data: myData }) {
            // 要求将 获取过来的 data数据 更名为 myData
            // 内部处理
            console.log(myData)

        }
        render(msg)

    </script>
</body>

</html>